;
!(function ($, window, document, undefined) {

    //定义全局对象
    window.fms = {};
    //定义全局变量（默认密码和秘钥）
    window.fms.constants = {
    		SELECT:{
    				STATUS:[{ id: '-1', text: '请选择' },{ id: '1', text: '启用' }, { id: '2', text: '停用' }],
    				SELECT_STATUS:[{ id: '1', text: '启用' }, { id: '2', text: '停用' }]
    		}
   		
        };
    
    window.fms.jgrid = {};
    window.fms.jgrid.originData = {};

    /**
     * jgrid默认配置
     */
    $.extend($.jgrid.defaults, {
        mtype: 'POST',       //数据提交方式，默认GET
        datatype: "json",    //服务器返回数据类型，默认xml
        autowidth: true,     //自适应父元素 宽度
        height: "auto",		 //表格高度，数字、像素、百分比
        shrinkToFit: false,  //true 按比例初始化列宽   false 使用指定的固定列宽
        autoScroll: true,    //滚动条
        rownumbers: true,    //是否显示序号
        rownumWidth: 30,     //序号列宽   
        altRows: true,      
        multiselect: true,   //是否可以多选
        multiboxonly: false, //true 只能点击box才选中，false 点击行业能选中
        jsonReader: {        //描述数据格式的数组
            id: "id",
            page: "nowpage",
            total: "totalPage",
            records: "total"
        },
        viewrecords: true,   //是否显示总记录数
        rowNum: 10,          //显示记录条数
        rowList: [10], //下拉框，用来覆盖rowNum
        loadComplete: function (xhr) {
            var table = this;

            //存放到全局对象，key--table.id
            window.fms.jgrid.originData[table.id] = xhr;

            setTimeout(function () {
                updatePagerIcons(table);
                //自适应表格 -- 表格初始化后调用
                autoResize("#" + table.id);
            }, 0);
        }
    });


    //replace icons with FontAwesome icons like above
    function updatePagerIcons(table) {
        var replacement = {
            'ui-icon-seek-first': 'ace-icon fa fa-angle-double-left bigger-140',
            'ui-icon-seek-prev': 'ace-icon fa fa-angle-left bigger-140',
            'ui-icon-seek-next': 'ace-icon fa fa-angle-right bigger-140',
            'ui-icon-seek-end': 'ace-icon fa fa-angle-double-right bigger-140'
        };
        $('.ui-pg-table:not(.navtable) > tbody > tr > .ui-pg-button > .ui-icon').each(function () {
            var icon = $(this);
            var $class = $.trim(icon.attr('class').replace('ui-icon', ''));

            if ($class in replacement) icon.attr('class', 'ui-icon ' + replacement[$class]);
        });
    };

    /**
     * jqgrid自适应屏幕
     */
    function autoResize(idObj) {
        //$(idObj).setGridHeight($(window).height() - 223);
        //窗口变动时
        $(window).resize(function () {
            //$(idObj).setGridHeight($(window).height() - 223);
            $(idObj).jqGrid('setGridWidth', $(".tb-grid").width());
        });
    }


    $(".left_panel_content .widget-toolbar").on('click', function () {
        $(".left_panel_content").hide();
        $(".right_main_content").addClass("col-xs-12").removeClass("col-xs-9");
        $(".left_panel_toggle").show();

        $(".tb-grid table").jqGrid('setGridWidth', $(".tb-grid").width());

    });
    $(".left_panel_toggle").on('click', function () {
        $(".left_panel_content").show();
        $(".right_main_content").addClass("col-xs-9").removeClass("col-xs-12");
        $(".left_panel_toggle").hide();

        $(".tb-grid table").jqGrid('setGridWidth', $(".tb-grid").width());
    });



    if ($.validator) {
        //扩展jquery.validate.js的验证规则
        //字符验证
        $.validator.addMethod("stringCheck", function (value, element) {
            return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);
        }, "只能包括中文字、英文字母、数字和下划线！&emsp;");

        //中文字两个字节
        $.validator.addMethod("byteRangeLength", function (value, element, param) {
            var length = value.length;
            for (var i = 0; i < value.length; i++) {
                if (value.charCodeAt(i) > 127) {
                    length++;
                }
            }
            return this.optional(element) || (length >= param[0] && length <= param[1]);
        }, "请确保输入的值在3-15个字节之间(一个中文字算2个字节)！&emsp;");

        // 手机号码验证
        $.validator.addMethod("isMobile", function (value, element) {
            var length = value.length;
            var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
            return this.optional(element) || (length == 11 && mobile.test(value));
        }, "请正确填写您的手机号码！&emsp;");

        // 电话号码验证
        $.validator.addMethod("isTel", function (value, element) {
            var tel = /^\d{3,4}-?\d{7,9}$/; // 电话号码格式010-12345678
            return this.optional(element) || (tel.test(value));
        }, "请正确填写您的电话号码！&emsp;");

        // 联系电话(手机/电话皆可)验证
        $.validator.addMethod("isPhone", function(value,element) {
    	    var length = value.length;
    	    var mobile =  /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(14[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
    	    var tel = /^\d{3,4}-?\d{7,9}$/;

    	    if(/-/.test(value)){
    	        return this.optional(element) || tel.test(value);
    	    }else{
    	        return this.optional(element) || (length == 11 && mobile.test(value));
    	    }

    	}, "请正确填写您的联系电话！&emsp;");

        //邮政编码验证 
        $.validator.addMethod("isZipCode", function (value, element) {
            var tel = /^[0-9]{6}$/;
            return this.optional(element) || (tel.test(value));
        }, "请正确填写您的邮政编码！&emsp;");
        
        //身份证验证 
        $.validator.addMethod("isIDCard", function (value, element) {
            var cardNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
            return this.optional(element) || (cardNo.test(value));
        }, "请正确填写您的证件号！&emsp;");
        // 交易权重验证   
    	$.validator.addMethod("transWeight", function(value, element) {   
    	    var tel = /^[1-4]{1}$/;
    	    return this.optional(element) || (tel.test(value));
    	}, "请正确填写您的交易权重（1-4的一位整数）！");
		// 金额验证   
    	$.validator.addMethod("money", function(value, element) {   
    	    var tel = /^\+?[1-9][0-9]*$/;
    	    return this.optional(element) || (tel.test(value));
    	}, "请正确填写金额！");
    	
    	//动态验证数据库查询的值
    	$.validator.addMethod("singleSelectOne", function(value, element) {// 下拉框验证
    		return !(value == "");
    	},"请必须选择一项！");
    	
    }


    /**
     * chosen-select选择器
     */
    window.fms.chosen_select = {
        initByDomId:function(param)
        {
            var jqueryDomId = "#"+param.domId;
            $(jqueryDomId).empty();
            $('<option value=\"\">  </option>').appendTo(jqueryDomId);
            $.each(param.nodes,function(i,n){
                $("<option value='"+n.id+"'>"+n.text+"</option>").appendTo(jqueryDomId); 
            });
            $(jqueryDomId).val(param.nodeValue);
            
            //渲染
            $(jqueryDomId).chosen({
                no_results_text: "没有找到结果！",
                search_contains:true, //关键字模糊搜索，设置为false，则只从开头开始匹配
                allow_single_deselect:true
            });
            
            //触发更新
            $(jqueryDomId).trigger("chosen:updated");
        }
    };
    
    /**
     * 生成32位UUID
     */
    window.fms.guid = function() {
        return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
            return v.toString(16);
        });
    }
    
    /**
     * 日期类型格式化
     */
    Date.prototype.format = function(format) {
    
    	var str = format;

    	str=str.replace(/yyyy|YYYY/,this.getFullYear());
    	str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));

    	var month = this.getMonth() + 1;
    	str=str.replace(/MM/,month>9?month.toString():'0' + month);
    	str=str.replace(/M/g,month);

    	str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
    	str=str.replace(/d|D/g,this.getDate());

    	str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());
    	str=str.replace(/h|H/g,this.getHours());
    	str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());
    	str=str.replace(/m/g,this.getMinutes());

    	str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());
    	str=str.replace(/s|S/g,this.getSeconds());
    	return str;
    }
    
	/**
	 * 远程后台验证
	 * @param 验证输入参数
	 */
    window.fms.RemoteValidate = function(param)
	{
		var remote ={
			url : param.url,
			type : "post",
			dataType : "json",
			data : param.data
		};
		return remote;
	}
    
    /**
     * 初始化单选下拉控制
     */
    window.fms.InitSingleSelect = function(param)
    {
    	var tradeTypeList = [];
    	$.ajax({
			data : param.data, 
			url : param.url,
			type : 'post',
			dataType : 'json',
			success : function(data) {
				 var items = [];
				 if(param['option']) //当数据对象不是{id:0,text:'ANTS'}这种形式的时候，可以使用类似此方法创建新的数组对象
				 {
					 $.each(data, function (i, v) {
						 items.push({id:v[param['option']['id']],text:v[param['option']['text']]})
				     });
				 }
				 else
				 {
					 items = data;
				 }
				 
				 var singleSelect = $("#"+param.id).select2({
					 placeholder:param.placeholder,
            		 data: items,
            		 allowClear:true
            	 })
            	 if(param.value)
            	 {
            		 singleSelect.val(param.value).trigger('change');
     			 }
			},
  			error : function(data){
				layer.msg("数据异常！", {
					icon : 1,
					time : 1000
				}, function(index) {});
			}
		});
    }
    
    /**
     * 根据静态常量初始化值，非远程调用
     */
     window.fms.InitSingleSelectByStatic = function(param){
    	$("#"+param.id).empty();
    	var selectWidget=$("#"+param.id).select2({
        	data:param.data,
        	minimumResultsForSearch:-1
    	});
    	if(param.value)
    	{
    		selectWidget.val(param.value).trigger('change');
    	}
    	
    	return selectWidget;
    }
    
    /**
     * 初始化多选下拉控制
     */
    window.fms.InitMultSelect = function(param){  	
    	$.ajax({
			url : param.url,
			type : 'post',
			dataType : 'json',
			success : function(data) {
				$.each(data,function(i,v){
					$("<option value='"+v[param['option']['id']]+"'>"+v[param['option']['text']]+"</option>").appendTo("#"+param.id);
		        });
		       
		        var value = param.value;
		        if(value && typeof value =='string')
		        {
		        	if("ALL" == value)
		        	{
		        		$.each(data,function(i,v){
		        			$("#"+param.id + " option[value='" + v[param['option']['id']] + "']").attr('selected', 'selected');
		        		});
		        	}
		        	else
		        	{
		        		$.each(value.split(','),function(i,v){
		        		$("#"+param.id + " option[value='" + v + "']").attr('selected', 'selected');
		        	});
		        	}
		        	
        			$("#"+param.id).trigger("liszt:updated");
		        }
		        
		         //渲染搜索
		        $("#"+param.id).chosen({
		            no_results_text: "没有找到结果！",
		            search_contains:true, //关键字模糊搜索，设置为false，则只从开头开始匹配
		            allow_single_deselect:true
		        });
		        
		        //触发更新
		        $("#"+param.id).trigger("chosen:updated");
			},
			error : function(data){
				
			}
    	});
    }
    /**
     *  将编码转为具体的名称
     */
    window.fms.TransCode = function(param){  
	    var value = "";
	    
	    if(param.value && param.value != "")
	    {
	    	$.each(param.value.split(","),function(i,v){
	 	  	   if(param.data[v])
	 	  	   {
	 	  	   	   value += param.data[v][param.field] + ",";
	 	  	   }
	 				
	 	    });
	    } 
		return value.toString().substring(0,value.toString().length-1);
    }
    
    /**
     * 验证多选框
     */
    window.fms.MutiSelectValidate = function(param){
    	if(param.validate == false)
    	{
    		if($("#"+param.id+" option:selected").length <= 0)
    		{
    			fms.ShowMsg({msg:param.msg,icon: 0});
    			return false;
    		}
    		if($("#"+param.id+" option:selected").length >= 1)
    		{
    			fms.ShowMsg({msg:param.msg,icon: 0});
    			return false;
    		}
    	}
    	return true;
    }
    
    window.fms.MutiSelectsValidate = function(params){
    	 var result = true;
    	 $.each(params,function(i,v){
    	 	result =  (result && fms.MutiSelectValidate(v));
	    });
	    return result;
    }
    
    /**
     * 系统显示提示信息
     * icon: 0.黄色感叹号 1.绿色勾勾 2.红色叉叉 3.黄色问号 4.灰色锁 5.撇嘴人脸 6.绿色微笑人脸
     */
    window.fms.ShowMsg = function(param){
    	param.msg += param.data ? "(失败原因："+JSON.stringify(param.data)+")" : '';
      	layer.msg(param.msg, {
      		icon : param.icon,
    		time : 3000// 信息显示时间
    	}, function(index) {
    		layer.close(index);
    	});
   }
   


    
})(jQuery, window, document);